/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package server.negocio;

import server.excepciones.CitaYaExistenteException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Vector;
import server.dominio.Beneficiario;
import server.dominio.Cita;
import server.excepciones.BeneficiarioInexistenteException;
import server.excepciones.CitaNoValidaException;
import server.excepciones.FechaNoValidaException;
import server.excepciones.MedicoInexistenteException;
import server.excepciones.ProblemaConexionException;
import server.excepciones.UsuarioIncorrectoException;
import server.excepciones.VolanteNoValidoException;

/**
 *
 * @author tpaxle
 */
public class Controlador_G_Citas {
    private Fachada_Servidor fachada_basedats;
    private Controlador_Servidor c_servidor;
    private Notificador notificador;
    private Controlador_G_Usuarios c_usuarios;
    private Controlador_Horario c_horario;
    private DateFormat formateador;
    public Controlador_G_Citas(Controlador_Servidor c_servidor, Controlador_G_Usuarios c_usuarios, Controlador_Horario c_horario) {
        this.c_servidor = c_servidor;
        this.c_usuarios = c_usuarios;
        this.c_horario = c_horario;
        notificador= new Notificador(c_servidor);
        fachada_basedats= new Fachada_Servidor();
        formateador= new SimpleDateFormat("yyyy-MM-dd HH:mm");
    }

    public Cita pedirCita(long idSesion, Beneficiario beneficiario, String idMedico, Date fechayHora, long duracion) throws RemoteException, BeneficiarioInexistenteException, MedicoInexistenteException, FechaNoValidaException, CitaYaExistenteException, SQLException, Exception {
        Cita cita= null;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            if(c_servidor.getProxyServidorb().pedirCita(beneficiario,idMedico, fechayHora)){
                cita= fachada_basedats.pedirCita(beneficiario, idMedico, formateador.format(fechayHora));
                notificador.notificarnuevacita(cita);
            }else{
                throw new ProblemaConexionException("La conexion entre S1 y S2 a fallado");
            }
        }
        return cita;
    }

    public Cita pedirCita(long idSesion, Beneficiario beneficiario, long idVolante, Date fechayHora, long duracion) throws RemoteException, BeneficiarioInexistenteException, MedicoInexistenteException, FechaNoValidaException, VolanteNoValidoException, SQLException, Exception {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public Vector<Cita> getCitas(long idSesion, String dni) throws RemoteException, BeneficiarioInexistenteException, SQLException, Exception {
        Vector<Cita> arrayCitas=null;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            arrayCitas= fachada_basedats.getCitas(dni);
        }
        return arrayCitas;
    }

    public void anularCita(long idSesion, Cita cita) throws RemoteException, CitaNoValidaException, SQLException, Exception {
        if(c_servidor.comprobarUsuario(1, idSesion)){
            if(c_servidor.getProxyServidorb().rechazarCita(cita)){
                fachada_basedats.eliminarcitas(cita);
                notificador.notificaranulacioncita(cita);
            }else
                throw new ProblemaConexionException("Problema S1 S2");
        }
    }

    public void getCitasMedico(long idSesion, Object Informacion) throws UsuarioIncorrectoException, SQLException {
        String info= (String)Informacion;
        ArrayList<Object> citas;
        if(c_servidor.comprobarUsuario(1, idSesion)){
            fachada_basedats.obtenercitasmedico(info);
        }
    }



}
